<template>
  <view class="wrapper" v-if="goodsDetail.pics">
    <swiper
      class="swiper"
      indicator-dots
      autoplay
      circular
      indicator-color="#ccc"
      indicator-active-color="#fff"
    >
      <block v-for="(item, index) in goodsDetail.pics" :key="index">
        <swiper-item @click="prevImg(index)">
          <image class="swiper-img" :src="item.pics_big"></image>
        </swiper-item>
      </block>
    </swiper>
    <!-- 商品信息 -->
    <view class="goods-info">
      <view class="price">￥{{ goodsDetail.goods_price }}</view>
      <view class="name-favo">
        <view class="name">{{ goodsDetail.goods_name }}</view>
        <view class="favo">
          <text class="iconfont icon-share"></text>
          <text>分享</text>
          <button open-type="share">分享</button>
        </view>
      </view>
      <view class="express">快递: 免运费</view>
    </view>
    <view class="promote">
      <view>
        <text class="name">促销</text>
        <text class="detail">满300减30元</text>
      </view>
      <view class="brother">
        <text class="name">已选</text>
        <text class="detail gray">黑色/S/1件</text>
      </view>
    </view>
    <!-- 图文介绍 -->
    <view class="goods-detail">
      <view class="tabs">
        <text
          :class="{ active: activeIndex === index }"
          v-for="(item, index) in menuList"
          :key="item"
          @click="changeActive(index)"
          >{{ item }}</text
        >
      </view>
      <view class="main">
        <rich-text
          v-show="!activeIndex"
          :nodes="goodsDetail.goods_introduce"
        ></rich-text>
        <view v-show="activeIndex">商品参数</view>
      </view>
    </view>
    <view class="fixed-bottom">
      <view class="icon-text">
        <text class="iconfont icon-kefu"></text>
        <text>联系客服</text>
        <button open-type="contact">客服</button>
      </view>
      <view class="icon-text" @click="toCart">
        <text class="iconfont icon-cart"></text>
        <text>购物车</text>
      </view>
      <view class="btn add-cart-btn" @click="add2Cart">加入购物车</view>
      <view class="btn buy-btn" @click="toPay">立即购买</view>
    </view>
  </view>
</template>

<script>
export default {
  data () {
    return {
      menuList: ['图文介绍', '规格参数'],
      // 商品详情数据
      goodsDetail: {},
      // 当前选中下标
      activeIndex: 0
    }
  },
  onLoad (options) {
    let goodsId = options.goodsId
    this.queryGoodsDetail(goodsId)
  },
  // 定制分享弹窗的内容
  onShareAppMessage () {
    return {
      title: this.goodsDetail.goods_name, // 转发的标题
      imageUrl: this.goodsDetail.pics[0].pics_big // 图片
    }
  },
  methods: {
    toPay () {
      // 跳转支付页面
      wx.navigateTo({
        url: '/pages/pay/main?goodsId=' + this.goodsDetail.goods_id
      })
    },
    // 跳转购物车
    toCart () {
      wx.switchTab({
        url: '/pages/cart/main'
      })
    },
    add2Cart () {
      // 更新
      let goodsId = this.goodsDetail.goods_id
      // 调用vuex的mutations
      this.$store.commit('add2Cart', goodsId)
      // 提示
      wx.showToast({
        title: '添加成功！'
      })
    },
    prevImg (index) {
      // 数组的map方法,会返回一个新的数组,对目标数组遍历,并每一项执行一个函数,返回值作为新数组元素
      let urls = this.goodsDetail.pics.map(item => {
        return item.pics_big
      })
      wx.previewImage({
        current: index, // 默认显示的图片链接/下标
        urls // 需要预览的图片链接的数组
      })
    },
    changeActive (index) {
      this.activeIndex = index
    },
    // 查询商品详情
    async queryGoodsDetail (goodsId) {
      this.goodsDetail = await this.$request({
        url: '/api/public/v1/goods/detail?goods_id=' + goodsId
      })
    }
  }
}
</script>
<style lang="less">
.iconfont {
  font-size: 40rpx;
}

.wrapper {
  background-color: #f4f4f4;
  padding-bottom: 98rpx;
}

.swiper {
  height: 720rpx;
}

.swiper-img {
  width: 100%;
  height: 720rpx;
}

.goods-info {
  padding: 40rpx 0 30rpx 20rpx;
  background-color: #fff;

  .price {
    color: #eb4450;
    font-size: 40rpx;
  }

  .name-favo {
    display: flex;
    height: 78rpx;
    margin-top: 14rpx;

    .name {
      color: #333;
      flex: 1;
      font-size: 28rpx;
      padding-right: 78rpx;
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: 2; // 控制多行的行数
      -webkit-box-orient: vertical;
    }

    .favo {
      border-left: 1px solid #ddd;
      width: 144rpx;
      color: #999;
      font-size: 24rpx;
      display: flex;
      flex-direction: column;
      align-items: center;
      position: relative;

      button {
        position: absolute;
        opacity: 0;
      }
    }
  }

  .express {
    color: #999;
    font-size: 24rpx;
    margin-top: 20rpx;
  }
}

.promote {
  margin-top: 20rpx;

  view {
    background-color: #fff;
    height: 96rpx;
    line-height: 96rpx;
    font-size: 28rpx;
    margin-top: 20rpx;
    padding-left: 20rpx;

    &.brother {
      margin-top: 0;
    }

    .name {
      color: #404040;
    }

    .detail {
      color: #ff4055;
      margin-left: 40rpx;

      &.gray {
        color: #dfdfdf;
      }
    }
  }
}

.goods-detail {
  margin-top: 20rpx;
  background-color: #fff;

  .tabs {
    display: flex;

    text {
      flex: 1;
      text-align: center;
      color: #404040;
      font-size: 22rpx;
      height: 100rpx;
      line-height: 100rpx;
      box-sizing: border-box;

      &.active {
        color: #ff4055;
        border-bottom: 10rpx solid #ff2644;
      }
    }
  }
}

.fixed-bottom {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  height: 98rpx;
  display: flex;
  background-color: #fff;

  .icon-text {
    flex: 2;
    font-size: 20rpx;
    color: #404040;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    position: relative;

    button {
      position: absolute;
      opacity: 0;
    }
  }

  .btn {
    flex: 3;
    color: #fff;
    text-align: center;
    line-height: 98rpx;

    &.add-cart-btn {
      background-color: #ffb400;
    }

    &.buy-btn {
      background-color: #ff2d4a;
    }
  }
}
</style>
